#ifndef __AES_H__
#define __AES_H__

#include "fm33lg0xx_fl.h"

#include <string.h>

/**
 * @brief 初始化AES加密模块
 *
 * @param key_len           密钥长度
 * @param cipher_mode       加密模式
 * @param operation_mode    操作模式
 * @param data_type         数据类型
 */
void AES_Init(uint32_t key_len, uint32_t cipher_mode, uint32_t operation_mode, uint32_t data_type);

/**
 * @brief  AES加解密处理流程
 * @note
 * DataOut指针空间由调用者申请，空间大小必须是16字节的整数倍（因为即使是不足16字节的数据进行加密，AES处理不足16字节会进行补零操作，然后再进行加解密）
 * @param    KeyIn 密钥指针
 * @param    KeyLen 密钥长度
 * @param    IVRIn 向量指针
 * @param    DataIn 加密输入数据指针
 * @param    DataInLen 加密数据输入长度
 * @param    DataOut 解密输出数据指针
 * @param    DataOutLen 解密输出长度
 * @retval 返回错误状态，可能值：
 *         -FL_PASS 测试成功
 *         -FL_FAIL 测试失败
 */
FL_ErrorStatus AES_EncryptionAndDecryption(uint8_t *key_in, uint8_t key_len, uint8_t *ivr_in,
                                           uint8_t *data_in, uint32_t data_in_len, uint8_t *data_out,
                                           uint32_t *data_out_len);

FL_ErrorStatus Test_AES_CTR_Decrypt(void);

#endif
